package com.company.zonghelizi.jihe.myjihe;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 自己实现的一些数据，加强对数据结构的理解
 * 底层数组
 * 大小可以膨胀和收缩
 */
public class MyArrayList {
    private Object[] arr = new Object[5];
    // 不是数组的大小,而是list容器的大小。
    private int size = 0;

    // 将obj追加到list尾部
    public void add(Object obj){
        if(size == arr.length){
            // 扩容，拷贝数组的方法
            this.arr = Arrays.copyOf(arr,arr.length+5);
        }
        arr[size++] = obj;
    }

    // 将obj追加到头部
    public void addFist(Object obj){
        if(size == arr.length){
            // 扩容
            this.arr = Arrays.copyOf(arr,arr.length+5);
        }
        System.arraycopy(arr,0,arr,1,size);
        arr[0] = obj;
        size++;
    }

    // 根据下标查询某个对象
    public Object get(int index){
        if(index<0||index>=size){
            throw new IndexOutOfBoundsException("index="+index);
        }
        return arr[index];
    }

    // 将obj插入到index
    public void add(int index,Object obj){
        if(index<0||index>size){
            throw new IndexOutOfBoundsException("index="+index);
        }
        if(size == arr.length){
            // 扩容
            this.arr = Arrays.copyOf(arr,arr.length+5);
        }
        System.arraycopy(arr,index,arr,index+1,size-index);
        arr[index] = obj;
        size++;
    }

    // 删除index位置的obj
    public void remove(int index){
        if(index<0||index>=size){
            throw new IndexOutOfBoundsException("index="+index);
        }
        arr[index] = null;
        System.arraycopy(arr,index+1,arr,index,size-index-1);
        size--;

    }
}